﻿package com.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.apache.log4j.Logger;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class FileUtils {
	private static final Logger logger = Logger.getLogger(FileUtils.class);
	/**
	 * 文件保存方法
	 * @param file
	 * 				需要保存的文件
	 * @param fileName原名
	 * 				文件，如d:\xxx\xxx.jpg
	 * @param path
	 * 				文件目录路径，不包含文件名
	 * @return
	 * 				若无异常，返回文件完整路径名，否则返回空
	 */
	public static String saveFile(File file, String fileName, String path){
		String fileType = fileName.substring(fileName.lastIndexOf("."));
		if(file == null){
			logger.error("文件为空！");
			return null;
		}
		DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		Date date = new Date();
		Random random = new Random();
		//构造文件名，时间加三位随机数
		String filePath = path + df.format(date) + random.nextInt(10) + random.nextInt(10) + random.nextInt(10) + fileType;
		logger.debug("保存文件：" + filePath);
		try{
			File dir = new File(path);
			if(!dir.exists()){
				dir.mkdirs();
			}
			File nFile = new File(filePath);
			InputStream is = new FileInputStream(file);
			OutputStream fout = new FileOutputStream(nFile);
	        byte[] b = new byte[1024];
	        int len = 0;
	        while ((len = is.read(b)) != -1) {
	            fout.write(b, 0, len);
	        }
	        fout.close();
	        is.close();
		}catch(IOException e){
			logger.error("保存文件发生异常！" + e.getMessage());
			e.printStackTrace();
			return null;
		}
		logger.debug("文件保存成功！");
		return filePath;
	}
	
	/**
	 * 文件保存方法
	 * @param file
	 * 				需要保存的文件
	 * @param fileName原名
	 * 				文件，如d:\xxx\xxx.jpg
	 * @param path
	 * 				文件目录路径，不包含文件名
	 * @return
	 * 				若无异常，返回文件完整路径名，否则返回空
	 */
	public static String saveFile(CommonsMultipartFile file, String appPath, String path){
		String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
		System.out.println("byteSize" + file.getBytes().length);
		System.out.println("size" + file.getSize());
		//System.out.println("byte" + file.getBytes());
		if(file == null){
			logger.error("文件为空！");
			return null;
		}
		DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		Date date = new Date();
		Random random = new Random();
		//构造文件名，时间加三位随机数
		String httpPath = path + df.format(date) + random.nextInt(10) + random.nextInt(10) + random.nextInt(10) + fileType;
		String filePath = appPath + httpPath;
		logger.debug("保存文件：" + filePath);
		try{
			File dir = new File(path);
			if(!dir.exists()){
				dir.mkdirs();
			}
			File nFile = new File(filePath);
			InputStream is = file.getInputStream();
			OutputStream fout = new FileOutputStream(nFile);
	        byte[] b = new byte[1024];
	        int len = 0;
	        while ((len = is.read(b)) != -1) {
	            fout.write(b, 0, len);
	        }
	        fout.close();
	        is.close();
		}catch(IOException e){
			logger.error("保存文件发生异常！" + e.getMessage());
			e.printStackTrace();
			return null;
		}
		logger.debug("文件保存成功！");
		return httpPath;
	}
}
